﻿using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Text;

namespace Surging.Core.Common
{
    /// <summary>
    /// 环信消息体
    /// </summary>
    /// <typeparam name="T"></typeparam>
    [DataContract]
    public class MsgRequest<T> where T : BaseMsg
    {
        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        public string id { get; set; }
        /// <summary>
        /// users 给用户发消息。chatgroups: 给群发消息，chatrooms: 给聊天室发消息
        /// </summary>
        [DataMember]
        public string target_type { get; set; }

        /// <summary>
        /// 注意这里需要用数组，数组长度建议不大于20，即使只有一个用户，也要用数组 ['u1']，给用户发送时数组元素是用户名，给群组发送时数组元素是groupid
        /// </summary>
        [DataMember]
        public string[] target { get; set; }

        /// <summary>
        /// 消息类型及消息内容
        /// </summary>
        [DataMember]
        public T msg { get; set; }

        /// <summary>
        /// 表示消息发送者。无此字段Server会默认设置为"from":"admin"，有from字段但值为空串("")时请求失败
        /// </summary>
        [DataMember]
        public string from { get; set; }

        /// <summary>
        /// 扩展属性，由APP自己定义。可以没有这个字段，但是如果有，值不能是"ext:null"这种形式，否则出错
        /// </summary>
        [DataMember]
        public IDictionary<string, object> ext { get; set; }
    }

    /// <summary>
    /// 消息基类，确定类型
    /// </summary>
    [DataContract]
    public class BaseMsg
    {
        /// <summary>
        /// 消息类型
        /// </summary>
        [DataMember]
        public string type { get; set; }
    }
}
